﻿using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using Engine;

namespace MyControls
{
    public partial class SSCom : UserControl
    {
        #region Properties

        private bool _capture = true;//Xác định xem có cần capture ảnh từ richtextbox không

        private string _pt = string.Empty;
        /// <summary>
        /// Thứ tự của phần tử để hiển thị ra ngoài
        /// </summary>
        public string PT
        {
            set
            {
                _pt = value;
                lblIndex.Text = _pt;
            }
            get { return _pt; }
        }

        private int _level = 0;
        /// <summary>
        /// Level của phần tử: 0 ~ dễ; 1: trung bình; 2: khó
        /// </summary>
        public int Level
        {
            set { _level = value; }
            get { return _level; }
        }

        private string _fileName = string.Empty;
        /// <summary>
        /// Tên file ảnh để lưu vào file xml
        /// </summary>
        public string FileName
        {
            set { _fileName = value; }
            get { return _fileName; }
        }

        private string _fullPath = string.Empty;
        /// <summary>
        /// Đường dẫn file ảnh trên local để đưa lên server
        /// </summary>
        public string FullPath
        {
            set { _fullPath = value; }
            get { return _fullPath; }
        }

        private bool _modify = true;
        /// <summary>
        /// Trạng thái của phần tử
        /// Căn cứ vào đây để biết có cần tải lại ảnh hay không
        /// </summary>
        public bool Modify
        {
            set { _modify = value; }
            get { return _modify; }
        }

        private Image _image = null;
        /// <summary>
        /// Ảnh để hiện ra trong trường hợp xem lại đề đã có
        /// </summary>
        public Image Image
        {
            set { _image = value; }
            get { return _image; }
        }

        private string _group = string.Empty;
        public string Group
        {
            set { _group = value; }
            get { return _group; }
        }

        private string _myText = string.Empty;
        public string MyText
        {
            set
            {
                _myText = value;
                rtxtData.Visible = cmdBrowse.Visible = _capture;
                picData.Visible = cmdEdit.Visible = !_capture;
                rtxtData.Text = _myText;
            }
            get { return _myText; }
        }

        #endregion

        #region Constructor
        public SSCom()
        {
            InitializeComponent();
            picData.Visible = !(rtxtData.Visible = true);
            rtxtData.Focus();
        }

        public SSCom(int level, string fileName, Image image, string group)
        {
            InitializeComponent();
            bool _exists = (string.Empty != fileName) & (image != null);
            SetProperties(level, fileName, image, FullPath, !_exists, group);
            #region Show
            rtxtData.Visible = !(picData.Visible = _exists);
            if (_exists)
            {
                picData.Image = Image;
            }
            _capture = cmdBrowse.Visible = !(cmdEdit.Visible = _exists);
            #endregion
        }
        #endregion

        #region User's Methods
        private void SetProperties(int level, string fileName, Image image, string fullPath, bool modify, string group)
        {
            Level = level;
            FileName = fileName;
            Image = image;
            FullPath = fullPath;
            Modify = modify;
            Group = group;
        }

        /// <summary>
        /// Capture image from richtextbox
        /// </summary>
        /// <returns>Đường dẫn tới file ảnh</returns>
        public string MyCapture(int _class)
        {
            if (_capture)
            {
                FileName = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffffff").Replace("/", string.Empty).Replace(":", string.Empty).Replace(" ", string.Empty);
                FileName += ".png";
                // Bo het dau xuong dong
                string stringText = rtxtData.Text.Replace("\n", string.Empty);
                stringText = stringText.Trim();
                if (stringText.CompareTo("") == 0)
                {
                    CEngine.CreateImageFromEquations(ref rtxtData, FileName, false);
                }
                // Nguoc lai neu khong phai la so binh thuong
                else
                {
                    CEngine.CreateImageFromText(rtxtData.Text, FileName, _class);
                }
                SetProperties(Level, FileName, Image.FromFile(Environment.CurrentDirectory + @"\" + FileName), Environment.CurrentDirectory + @"\" + FileName, true, Group);
            }

            return FullPath;
        }
        #endregion

        private void cmdBrowse_Click(object sender, EventArgs e)
        {
            OpenFileDialog _openFileDialog = new OpenFileDialog();
            _openFileDialog.Filter = "Image PNG|*.png|Image Jpeg|*.jpg|Image Bitmap|*.bmp|All Images|*.png;*.jpg;*.jpeg;*.bmp";
            _openFileDialog.RestoreDirectory = true;
            _openFileDialog.Title = "Select one image file!";
            if (_openFileDialog.ShowDialog() == DialogResult.OK)
            {
                System.Drawing.Image tmp = Image.FromFile(Path.GetFullPath(_openFileDialog.FileName));
                if (tmp.Size.Width > 175 || tmp.Size.Height > 120)
                {
                    MessageBox.Show(
                        "Ảnh quá lớn! Vui lòng chọn ảnh kích thước nhỏ hơn hoặc bằng " + 175 + "x" +
                        120, "Thong bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }

                _capture = false;
                FileName = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss:fffffff").Replace("/", string.Empty).Replace(":", string.Empty).Replace(" ", string.Empty);
                FileName += ".png";
                SetProperties(Level, FileName, Image.FromFile(Path.GetFullPath(_openFileDialog.FileName)), Path.GetFullPath(_openFileDialog.FileName), true, Group);
                picData.Image = Image.FromFile(Path.GetFullPath(_openFileDialog.FileName));
                cmdBrowse.Visible = rtxtData.Visible = false;
                picData.Visible = cmdEdit.Visible = true;
            }
        }

        private void cmdEdit_Click(object sender, EventArgs e)
        {
            DialogResult dialogResult = MessageBox.Show("Nếu chấp nhận sửa bạn sẽ phải nhập lại nội dung.\nBạn có chắc muốn sửa?", "Xac nhan sua", MessageBoxButtons.YesNo,
                                                        MessageBoxIcon.Question);
            if (dialogResult == DialogResult.Yes)
            {
                _capture = true;
                SetProperties(Level, string.Empty, null, string.Empty, true, Group);
                cmdBrowse.Visible = rtxtData.Visible = true;
                picData.Visible = cmdEdit.Visible = false;
                rtxtData.Focus();
            }
        }
    }
}
